package org.eddycar.jproyeddycar.negocio;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.JOptionPane;

public class Control {

    public double redondearCantidad(double cu) {
        int cu1 = (int) cu;
        double cu2 = cu - cu1;
        double cu3 = cu2 * 100;
        if (cu3 >= 50) {
            cu1 = cu1 + 1;
        }
        return cu1;
    }

    public int diasMes(int mes, int año) {
        int totalDias = 0;
        switch (mes) {
            case 0:
                totalDias = 31;
                break;
            case 1:
                if ((año % 4) == 0) {
                    totalDias = 29;
                } else {
                    totalDias = 28;
                }
                break;
            case 2:
                totalDias = 31;
                break;
            case 3:
                totalDias = 30;
                break;
            case 4:
                totalDias = 31;
                break;
            case 5:
                totalDias = 30;
                break;
            case 6:
                totalDias = 31;
                break;
            case 7:
                totalDias = 31;
                break;
            case 8:
                totalDias = 30;
                break;
            case 9:
                totalDias = 31;
                break;
            case 10:
                totalDias = 30;
                break;
            case 11:
                totalDias = 31;
                break;
        }
        return totalDias;
    }

    public static boolean verificaCedulaRuc(String cedula) {
        int decu[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        int total = 0;
        if (cedula.length() == 10) {
            for (int j = 0; j <= 9; j++) {
                decu[j] = (cedula.charAt(j));
                switch (decu[j]) {
                    case 48:
                        decu[j] = 0;
                        break;
                    case 49:
                        decu[j] = 1;
                        break;
                    case 50:
                        decu[j] = 2;
                        break;
                    case 51:
                        decu[j] = 3;
                        break;
                    case 52:
                        decu[j] = 4;
                        break;
                    case 53:
                        decu[j] = 5;
                        break;
                    case 54:
                        decu[j] = 6;
                        break;
                    case 55:
                        decu[j] = 7;
                        break;
                    case 56:
                        decu[j] = 8;
                        break;
                    case 57:
                        decu[j] = 9;
                        break;
                }
            }

            int numPro = (decu[0] * 10) + decu[1];
            if ((numPro >= 1 & numPro <= 24) & (decu[2] >= 0 & decu[2] < 6)) {
                for (int i = 0; i <= 8; i++) {
                    if (i % 2 == 0) {
                        decu[i] = decu[i] * 2;
                        if (decu[i] > 9) {
                            decu[i] = decu[i] - 9;
                        }
                    }
                    total = total + decu[i];
                }
                double decProxima = total / 10;
                decProxima = (decProxima + 1) * 10;
                double verifica = decProxima - total;
                if ((verifica == decu[9]) || (verifica == 10 & decu[9] == 0)) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    public String validarCodigo(String codigo) {
        String mensaje = "";
        if (codigo.isEmpty() == false) {
            if (codigo.length() == 13) {
                if (verificaCedulaRuc(codigo.substring(0, 10))) {

                    try {
                        int s = Integer.parseInt(codigo.substring(10, 12));

                    } catch (NumberFormatException e) {
                        mensaje = "Debe ingresar solo números";
                    }
                } else {
                    mensaje = "Codigo incorrecto: \nLos 10 primeros dígitos deben ser una cédula";
                }
            } else {
                mensaje = "El codigo debe contener 13 dígitos\n Ej: 001";
            }
        } else {
            mensaje = "Falta el código del Contrato Ej: 001";
        }
        return mensaje;
    }

    public String cambiarNumerosTexto(double n) {
        n2t numero = new n2t();
        int num = (int) n;
        String res = "";
        double deci = n - num;
        int numdeci = (int) (deci * 100);
        if (numdeci > 0) {
            res = numero.decmillon(num).toUpperCase() + " con " + numero.decmillon(numdeci).toUpperCase() + " " + "(" + n + "$)";
        } else {
            res = numero.decmillon(num).toUpperCase() + " " + "(" + num + "$)";
        }
        return res;
    }

    public void respaldarBaseDeDatos() {
        try {
            SimpleDateFormat fecha = new SimpleDateFormat();
            Calendar tiempoActual = Calendar.getInstance();
            fecha = new SimpleDateFormat("dd,MM,yy,HH-mm-ss");
            String tiempo = fecha.format(tiempoActual.getTime());
            // Comando:
            String comando = "";
            String archivo = "";
            File backupFile = null;
            if (System.getProperty("user.dir").toString().substring(0, 6).equals("/home/")) {
                comando = "/opt/PostgreSQL/9.1/bin/pg_dump";
                archivo = "/home/" + System.getProperty("user.name") + "/RespaldoBD/" + " eddycarRES " + " - " + tiempo + ".backup";
                backupFile = new File("/home/" + System.getProperty("user.name") + "/RespaldoBD/" + " Operaciones " + " - " + tiempo + ".backup");
            } else {
                comando = "C:/Program Files/PostgreSQL/8.4/bin/pg_dump";
                archivo = "D:\\RespaldoBD\\" + " eddycarRES " + " - " + tiempo + ".backup";
                backupFile = new File("D:\\RespaldoBD\\" + " Operaciones " + " - " + tiempo + ".backup");
            }

            FileWriter fw = new FileWriter(backupFile);
            Runtime r;
            //PostgreSQL variables
            String user = "postgres";
            String dbase = "jproyeddycarDB";
            String password = "postgres";
            Process p;
            ProcessBuilder pb;
            //Ejecucion del proceso de respaldo
            r = Runtime.getRuntime();
            pb = new ProcessBuilder(comando, "-h", "localhost", "-p", "5432", "-U", user, "-F", "c", "-b", "-v", "-f", archivo, dbase);
            pb.environment().put("PGPASSWORD", password);
            pb.redirectErrorStream(true);
            p = pb.start();
            InputStreamReader irs = new InputStreamReader(p.getInputStream());
            BufferedReader br = new BufferedReader(irs);
            String line;
            while ((line = br.readLine()) != null) {
                fw.write(line + "\n");
            }
            fw.close();
            irs.close();
            br.close();
            JOptionPane.showMessageDialog(null, "La base de datos se respaldo correctamente", "Excelente", JOptionPane.INFORMATION_MESSAGE);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Error: \n" + e);
        }
    }
}
